package com.lf.easyapi.util;

import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.security.SecureRandom;
import java.util.*;
import java.util.concurrent.ExecutorService;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 工具类
 * @author 
 * @date 2017年7月4日
 * @intefaceName CommFunc.java
 * @
 */
public class CommFunc {
	private static Log logger = LogFactory.getLog(CommFunc.class);


	private static Random m_prng = new SecureRandom();
	public static final String[] FILTER_ARR = { "select", "insert", "update", "delete"," and", "and "," or",
             "or ", "join", "union", "truncate", "drop", "alter", "alert",
             "confirm", "script", "prompt", "eval", "expression", "iframe"};

	
	/**
	 * 分组接口,用来获取分组依据字段
	 * @date 2017年6月26日
	 * @intefaceName CommFunc.java
	 * @@param <T>
	 */
	public interface GroupBy<T> {
		T groupby(Object obj) ;
	}


	public static final  <T extends Comparable<T> ,D> Map<T ,List<D>> group(Collection<D> colls ,GroupBy<T> gb){
		Map<T ,List<D>> map = new HashMap<T, List<D>>() ;
		if(colls == null || colls.isEmpty()) {
			logger.info("分組集合不能为空!");
			return map ;
		}
		if(gb == null) {
			logger.info("分組字段接口不能为Null!");
			return map ;
		}
		Iterator<D> iter = colls.iterator() ;
		while(iter.hasNext()) {
			D d = iter.next() ;
			T t = gb.groupby(d) ;
			if(map.containsKey(t)) {
				map.get(t).add(d) ;
			} else {
				List<D> list = new ArrayList<D>() ;
				list.add(d) ;
				map.put(t, list) ;
			}
		}
		return map ;
	}

//	public static final  <T extends Comparable<T> ,D> Map<T ,List<D>> group(Collection<D> colls ,GroupBy<T> gb,int listSize){
//		if(colls == null || colls.isEmpty()) {
//			logger.info("分組集合不能为空!");
//			return null ;
//		}
//		if(gb == null) {
//			logger.info("分組字段接口不能为Null!");
//			return null ;
//		}
//		Iterator<D> iter = colls.iterator() ;
//		Map<T ,List<D>> map = new HashMap<T, List<D>>() ;
//		while(iter.hasNext()) {
//			D d = iter.next() ;
//			T t = gb.groupby(d) ;
//			if(map.containsKey(t)) {
//				map.get(t).add(d) ;
//			} else {
//				List<D> list = new ArrayList<D>(listSize) ;
//				list.add(d) ;
//				map.put(t, list) ;
//			}
//		}
//		return map ;
//	}

	/**
	 * 分组接口,用来获取分组依据字段
	 * @date 2017年6月26日
	 * @intefaceName CommFunc.java
	 * @@param <T>
	 */
//	public interface HandleBusi<T,D> {
//		/**
//		 * 实现多线程分组方式
//		 * @param obj
//		 * @return
//		 */
//		T groupby(Object obj) ;
//
//		/**
//		 * 具体线程中处理业务逻辑
//		 * @param list
//		 */
//		void doHandle(List<D> list);
//	}

//	public static final  <T extends Comparable<T> ,D> void handleBusi(Collection<D> colls ,int listSize, final HandleBusi<T,D> gb){
//		if(colls == null || colls.isEmpty()) {
//			logger.info("分組集合不能为空!");
//			return;
//		}
//		if(gb == null) {
//			logger.info("分組字段接口不能为Null!");
//			return;
//		}
//		Iterator<D> iter = colls.iterator() ;
//		Map<T ,List<D>> map = new HashMap<T, List<D>>() ;
//		while(iter.hasNext()) {
//			D d = iter.next() ;
//			T t = gb.groupby(d) ;
//			if(map.containsKey(t)) {
//				map.get(t).add(d) ;
//			} else {
//				List<D> list = new ArrayList<D>(listSize) ;
//				list.add(d) ;
//				map.put(t, list) ;
//			}
//		}
//		for(Map.Entry<T ,List<D>> entry:map.entrySet()){
//			ThreadRunner<D,T> thread = new ThreadRunner<D, T>(entry.getValue(),entry.getKey()) {
//				@Override
//				public void doHandle(List<D> list) {
//					gb.doHandle(list);
//				}
//			};
//			pool.submit(thread);
//		}
//	}


	public static String sequenceId() {
		char[] buf = new char[24];
		int p = 0, i;

		long v = System.currentTimeMillis() & Long.MAX_VALUE;
		for (i = 0; i < 8; ++i) {
			int ch = (int) (v % 36);
			v /= 36;
			buf[7 - i] = (char) ((ch < 10) ? ('0' + ch) : ('A' + ch - 10));
			++p;
		}

		v = m_prng.nextLong() & Long.MAX_VALUE;
		for (i = 0; i < 8; ++i) {
			int ch = (int) (v % 36);
			v /= 36;
			buf[p] = (char) ((ch < 10) ? ('0' + ch) : ('A' + ch - 10));
			++p;
		}

		v = m_prng.nextLong() & Long.MAX_VALUE;
		for (i = 0; i < 8; ++i) {
			int ch = (int) (v % 36);
			v /= 36;
			buf[p] = (char) ((ch < 10) ? ('0' + ch) : ('A' + ch - 10));
			++p;
		}
		return new String(buf);

	}
	
	/**
	 * 获取唯一标识
	 * @return
	 */
	public static String getUniqueID(){
		String uniqueId = sequenceId();
		for(String s : FILTER_ARR){
			if(uniqueId.indexOf(s)>=0){
				return getUniqueID();
			}
		}
		return uniqueId;
	}
	
	
	public static void main(String[] args) {
		String amount = "1.129" ;
		MathContext mc = new MathContext(amount.length(),RoundingMode.HALF_UP);
		BigDecimal orderTotal = new BigDecimal(Double.valueOf(amount)).multiply(new BigDecimal(100),mc);// 支付金额
		String money = String.valueOf((int) Double.valueOf(orderTotal.toString()).doubleValue()) ;  //;
		
		System.out.println(new BigDecimal(money.toString()));
	}
	
	
}
